public class Object03 {
    public static void main(String[] args) {

        //类和对象的内存分配机制
        /*Java内存的结构分析
            栈 ：一般存放基本数据类型（局部变量）
            堆 ：存放对象（Cat cat,数组等）
            方法区 ：常量池（常量 ， 比如字符串） ， 类加载信息

        * */

        /*Java创建对象的流程简单分析
            Person p = new Person();
            p.name = "Jack";
            p.age = 16;
            先加载 Person 类信息 （属性和方法信息，只会加载一次）
            在堆中分配空间 ，进行默认初始化 ，把堆中的地址赋值给 p ，p 就指向堆中的对象
            进行指定初始化 ，比如 p.name = "Jack";
        * */

        /*示例：
        * */
        Person a = new Person();//先加载 Person 类信息 （属性和方法信息，只会加载一次）,在堆中分配空间 ，进行默认初始化 ，把堆中的地址赋值给 p ，p 就指向堆中的对象
        a.age = 15;//进行指定初始化
        a.name = "Jack";//进行指定初始化
        Person b;//声明一个对象 b
        b = a;//把 a 指向的地址赋值给 b
        System.out.println(b.name);
        b.age = 20;//b 修改了所指向地址对象的属性值
        b = null;//b 所指向的地址变为了null
        System.out.println(a.age);
        System.out.println(b.age);


    }
}
class Person{
    int age;
    String name;
    double sal;
    boolean isPass;
}